#include "types.h"
#include "defs.h"

// 设置内存区域为指定值
void* memset(void* dst, int c, uint64 n) {
    char* cdst = (char*)dst;
    for (uint64 i = 0; i < n; i++) {
        cdst[i] = c;
    }
    return dst;
}

// 内存移动（处理重叠区域）
void* memmove(void* dst, const void* src, uint64 n) {
    const char* s = src;
    char* d = dst;
    
    if (s < d && s + n > d) {
        // 从后向前拷贝，避免重叠问题
        s += n;
        d += n;
        while (n-- > 0) {
            *--d = *--s;
        }
    } else {
        // 从前向后拷贝
        while (n-- > 0) {
            *d++ = *s++;
        }
    }
    return dst;
}

// 内存拷贝（不处理重叠区域）
void* memcpy(void* dst, const void* src, uint64 n) {
    return memmove(dst, src, n); // 简单实现，使用memmove
}